package persistence;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import model.*;

public abstract class APProveedor {

	public static void insertarProveedor(Proveedor prov) {
		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO Proveedor (idProveedor,cuit,direccion,telefono,razonSocial, estado ) VALUES (?,?,?,?,?,1)";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, prov.getIdProveedor());
			ps.setString(2, prov.getCuit());
			ps.setString(3, prov.getDireccion());
			ps.setString(4, prov.getTelefono());
			ps.setString(5, prov.getRazonSocial());
			ps.execute();

			AdministradorConexiones.getInstancia().cerrarConexion(con);
		} catch (SQLException e) {
			System.out.println("Mensaje Error al Insertar Proveedor: " + e.getMessage());
			System.out.println("Stack Trace al Insertar Proveedor: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
	}

	public static Proveedor buscarProveedor(int idProveedor) {
		Proveedor p = null;
		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia select
			String senten = "SELECT * FROM Proveedor where idProveedor = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, idProveedor);
			ResultSet result = ps.executeQuery();
			while (result.next()) {
				//cambiar aca
				p = new Proveedor(result.getInt("idProveedor"),result.getString("cuit"), result.getString("direccion"), result.getString("telefono"),result.getString("razonSocial"));
			}

			AdministradorConexiones.getInstancia().cerrarConexion(con);
			return p;
		} catch (SQLException e) {
			System.out.println("Mensaje Error al Borrar Proveedor: " + e.getMessage());
			System.out.println("Stack Trace al Borrar Proveedor: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
		return null;
	}

	public static void modificarProveedor(Proveedor prov) {

		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia insert en tabla destino
			String senten = "UPDATE Proveedor set cuit = ? , direccion = ?, telefono = ?,razonSocial = ? where idProveedor = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, prov.getCuit());
			ps.setString(2,prov.getDireccion() );
			ps.setString(3,prov.getTelefono());
			ps.setString(4, prov.getRazonSocial());
			ps.setInt(5, prov.getIdProveedor());
			ps.execute();

			AdministradorConexiones.getInstancia().cerrarConexion(con);

		} catch (SQLException e) {
			System.out.println("Mensaje Error al Modificar Proveedor: " + e.getMessage());
			System.out.println("Stack Trace al Modificar Proveedor: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
	}

	public static void borrarProveedor(int idProveedor) {
		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia insert en tabla destino
			String senten = "UPDATE Proveedor SET estado = 0 where idProveedor = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, idProveedor);
			ps.execute();

			AdministradorConexiones.getInstancia().cerrarConexion(con);

		} catch (SQLException e) {
			System.out.println("Mensaje Error al Borrar Proveedor: " + e.getMessage());
			System.out.println("Stack Trace al Borrar Proveedor: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
	}
	
	public static Vector<Proveedor> proveedoresConOrdenActivas(){
		Connection con = AdministradorConexiones.getInstancia().crearConexion();
		String senten = "select * from proveedor pro inner join ordendecompra oc on pro.idProveedor = oc.idProveedor where oc.estado = 'Pendiente de envio'"; 
		Vector <Proveedor> proveedores = new Vector<Proveedor>();
		PreparedStatement ps = null;
		try {
			ps = con.prepareStatement(senten);
			ResultSet result = ps.executeQuery();
			while (result.next()) {
				proveedores.add(new Proveedor(result.getInt("idProveedor"),result.getString("cuit"), result.getString("direccion"), result.getString("telefono"),result.getString("razonSocial")));
			}
			
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		} catch (SQLException e) {
			System.out.println("Mensaje Error al buscar Proveedores: " + e.getMessage());
			System.out.println("Stack Trace al buscar Proveedores: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
		
		
		return proveedores;
	}
	
	
	
	public static Vector<Proveedor> buscarProveedoresOrdenDeCompraEsperandoEntrega(){
		Connection con = AdministradorConexiones.getInstancia().crearConexion();
		String senten = "select * from proveedor pro inner join ordendecompra oc on pro.idProveedor = oc.idProveedor where oc.estado = 'Esperando Entrega'"; 
		Vector <Proveedor> proveedores = new Vector<Proveedor>();
		PreparedStatement ps = null;
		try {
			ps = con.prepareStatement(senten);
			ResultSet result = ps.executeQuery();
			while (result.next()) {
				proveedores.add(new Proveedor(result.getInt("idProveedor"),result.getString("cuit"), result.getString("direccion"), result.getString("telefono"),result.getString("razonSocial")));
			}
			
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		} catch (SQLException e) {
			System.out.println("Mensaje Error al buscar Proveedores: " + e.getMessage());
			System.out.println("Stack Trace al buscar Proveedores: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
		
		
		return proveedores;
	}
	

	public static Proveedor buscarProveedor(String razonSocial) {
		
		Proveedor p = null;
		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia select
			String senten = "SELECT * FROM Proveedor where razonSocial = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, razonSocial);
			ResultSet result = ps.executeQuery();
			while (result.next()) {
				p = new Proveedor(result.getInt("idProveedor"),result.getString("cuit"), result.getString("direccion"), result.getString("telefono"),result.getString("razonSocial"));
			}

			AdministradorConexiones.getInstancia().cerrarConexion(con);
			return p;
		} catch (SQLException e) {
			System.out.println("Mensaje Error al buscar Proveedor: " + e.getMessage());
			System.out.println("Stack Trace al buscar Proveedor: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
		return null;
	}
	
}